package com.scrcu.core.batch.entity;

import com.boarsoft.common.Util;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;

/**
 * 批量的执行
 * @author Mac_J
 */
@Setter
@Getter
public class BatchExecution implements Serializable {

	public static final long serialVersionUID = 5121697045380748188L;

	/**
	 * 批量编号
	 */
	protected String code;

	/**
	 * 所属分组（业务群），对应服务的分组
	 */
	protected String catalog;

	/**
	 * 条目
	 */
	protected String entry;

	/**
	 * 分片号
	 */
	private String splitNo;

	/**
	 * 批量执行记录主键
	 */
	protected String id;
	/**
	 * 批量定义ID外键
	 */
	protected String infoId;

	/**
	 * 开始执行时间 格式：yyyy-MM-dd HH:mm:ss.SSS
	 */
	protected String startTime;

	/**
	 * 结束执行时间 格式：yyyy-MM-dd HH:mm:ss.SSS
	 */
	protected String endTime;

	/**
	 * 执行状态
	 */
	protected short status;

	/**
	 * 批量实例 IP:port
	 */
	protected String addr;

	/**
	 * 错误信息
	 */
	protected String error;

	/**
	 * 第几次执行（重跑和续跑时）
	 */
	protected int no = 1;

	/**
	 * 最近一次执行类型，0：新跑、1：续跑、2：重跑（即使之前是成功的）
	 */
	protected short type;

	/**
	 * 参数对象，Map<String, Object> 对应的JSON字符串
	 */
	protected String params;

	/**
	 * 步骤
	 */
	protected String step;

	public String toString() {
		return new StringBuilder(infoId).append("/").append(no)
				.append("/").append(type).append("/").append(id).toString();
	}

	public void setStartTime(String startTime) {
		this.startTime = startTime;
	}
	
	public void setStartTime(long startTime) {
		Date d = new Date();
		d.setTime(startTime);
		this.setStartTime(d);
	}

	public void setStartTime(Date startTime) {
		this.startTime = Util.date2str(startTime, Util.STDDTMF);;
	}

	public void setEndTime(String endTime) {
		this.endTime = endTime;
	}

	public void setEndTime(long endTime) {
		Date d = new Date();
		d.setTime(endTime);
		this.setEndTime(d);
	}

	public void setEndTime(Date endTime) {
		this.endTime = Util.date2str(endTime, Util.STDDTMF);
	}

	public void setEndTime() {
		this.endTime = Util.date2str(new Date(), Util.STDDTMF);
	}

	public void setError(String error) {
		if (error != null) {
			if (error.length() > 512) {
				error = error.substring(0, 512);
			}
			this.error = error;
		}
	}

}